home *** CD-ROM | disk | FTP | other *** search
/ Whiteline: Alpha / Whiteline Alpha.iso / progtool / modula2 / lpr / typeconv.mod < prev   
Encoding:
Modula Implementation  |  1994-09-22  |  3.1 KB  |  147 lines

  1. IMPLEMENTATION MODULE TypeConvert;
  2.  
  3. FROM SYSTEM IMPORT WORD, BYTE, ADDRESS, LONG;
  4. FROM Terminal IMPORT WriteLn, WriteString;
  5.  
  6. TYPE LONGWORD = ARRAY [0..3] OF BYTE;
  7.  
  8. PROCEDURE Char(x : BYTE) : CHAR;
  9.   VAR r : RECORD 
  10.             CASE : BOOLEAN OF
  11.               TRUE : w : BYTE |
  12.               FALSE: c : CHAR
  13.             END
  14.           END;
  15.   BEGIN
  16.     r.w:=x;
  17.     RETURN r.c
  18.   END Char;
  19.   
  20. PROCEDURE Byte(x : BYTE) : BYTE;
  21.   BEGIN
  22.     RETURN x
  23.   END Byte;
  24.  
  25. PROCEDURE Cardinal(x : WORD) : CARDINAL;
  26.   VAR r : RECORD 
  27.             CASE : BOOLEAN OF
  28.               TRUE : w : WORD |
  29.               FALSE: c : CARDINAL
  30.             END
  31.           END;
  32.   BEGIN
  33.     r.w:=x;
  34.     RETURN r.c
  35.   END Cardinal;
  36.  
  37. PROCEDURE Integer(x : WORD) : INTEGER;
  38.   VAR r : RECORD 
  39.             CASE : BOOLEAN OF
  40.               TRUE : w : WORD |
  41.               FALSE: i : INTEGER
  42.             END
  43.           END;
  44.   BEGIN
  45.     r.w:=x;
  46.     RETURN r.i
  47.   END Integer;
  48.  
  49. PROCEDURE Bitset(x : WORD) : BITSET;
  50.   VAR r : RECORD 
  51.             CASE : BOOLEAN OF
  52.               TRUE : w : WORD |
  53.               FALSE: b : BITSET
  54.             END
  55.           END;
  56.   BEGIN
  57.     r.w:=x;
  58.     RETURN r.b
  59.   END Bitset;
  60.   
  61. PROCEDURE Word(x : WORD) : WORD;
  62.   BEGIN
  63.     RETURN x
  64.   END Word;
  65.  
  66. PROCEDURE LongCard(x : ARRAY OF BYTE) : LONGCARD;
  67.   VAR r : RECORD 
  68.             CASE : BOOLEAN OF
  69.               TRUE : w : LONGWORD |
  70.               FALSE: c : LONGCARD
  71.             END
  72.           END;
  73.       n : CARDINAL;
  74.   BEGIN
  75.     IF HIGH(x)#3 THEN
  76.       WriteLn;
  77.       WriteString('Wrong size of argument in TypeConvert.LongCard');
  78.       HALT;
  79.       WriteLn;
  80.       RETURN LONG(0) 
  81.     END;
  82.     FOR n:=0 TO 3 DO r.w[n]:=x[n] END;
  83.     RETURN r.c
  84.   END LongCard;
  85.  
  86. PROCEDURE LongInt(x : ARRAY OF BYTE) : LONGINT;
  87.   VAR r : RECORD 
  88.             CASE : BOOLEAN OF
  89.               TRUE : w : LONGWORD;|
  90.               FALSE: i : LONGINT
  91.             END
  92.           END;
  93.       n : CARDINAL;
  94.   BEGIN
  95.     IF HIGH(x)#3 THEN
  96.       WriteLn;
  97.       WriteString('Wrong size of argument in TypeConvert.LongInt');
  98.       HALT;
  99.       WriteLn;
  100.       RETURN LONG(0)
  101.     END;
  102.     FOR n:=0 TO 3 DO r.w[n]:=x[n] END;
  103.     RETURN r.i
  104.    END LongInt;
  105.  
  106. PROCEDURE Real(x : ARRAY OF BYTE) : REAL;
  107.   VAR r : RECORD 
  108.             CASE : BOOLEAN OF
  109.               TRUE : w : LONGWORD;|
  110.               FALSE: r : REAL
  111.             END
  112.           END;
  113.       n : CARDINAL;
  114.   BEGIN
  115.     IF HIGH(x)#3 THEN
  116.       WriteLn;
  117.       WriteString('Wrong size of argument in TypeConvert.Real');
  118.       HALT;
  119.       WriteLn;
  120.       RETURN 0.0
  121.     END;
  122.     FOR n:=0 TO 3 DO r.w[n]:=x[n] END;
  123.     RETURN r.r
  124.    END Real;
  125.  
  126. PROCEDURE Address(x : ARRAY OF BYTE) : ADDRESS;
  127.   VAR r : RECORD 
  128.             CASE : BOOLEAN OF
  129.               TRUE : w : LONGWORD;|
  130.               FALSE: a : ADDRESS
  131.             END
  132.           END;
  133.       n : CARDINAL;
  134.   BEGIN
  135.     IF HIGH(x)#3 THEN
  136.       WriteLn;
  137.       WriteString('Wrong size of argument in TypeConvert.Address');
  138.       HALT;
  139.       WriteLn;
  140.       RETURN LONG(0)
  141.     END;
  142.     FOR n:=0 TO 3 DO r.w[n]:=x[n] END;
  143.     RETURN r.a
  144.    END Address;
  145.    
  146. END TypeConvert.
  147.